<?php

namespace App\Http\Controllers\YApi;

//use Illuminate\Http\Request;
use Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Session;
use Redirect;

use App\Models\UsersReg;

class UploadFaceController extends Controller
{

    public function uploadface(Request $request)
    {
		// 上传用户头像

        //取得上传文件,获得的临时文件，例如php143F.tmp
		$face = $request::file('face');
		$this->nameid = request::input('userid');
		// return $face;
		//得到上传文件的扩展名
		// $entension = $face -> getClientOriginalExtension();	

		// //$dirName = 'uploads\yds1\\'; //windows 系统下目录结构
		// $dirName = "usersface/" . $userid; // linux 系统下的目录结构（图片文件保存的目录）

		// $avatar_file = 'face_' . $userid . '_max' . '.' . $entension; // 大头像
		// $avatar_file_min = 'face_' . $userid . '_min' . '.' . $entension; // 小头像

		// // 获得的临时文件$face更名到$dirName目录下		
		// $path_max = $face -> move($dirName, $avatar_file); // 大头像路径
		// $$avatar_file_min = $this->thumb($path_max, false , 1); //裁切图片		
		// // $path_min = $face -> move($dirName, $avatar_file_min); // 大头像路径
		$res = $this->thumb($face); //裁切图片
		if($res == false){
			// 头像修改失败
            return 0;
        }else{
            // 头像修改成功
            return 1;
		}
	}
		
	/**
     * 生成缩略图
     * @static
     * @access public
     * @param string $image  原图
     * @param string $type 图像格式
     * @param string $maxWidth  宽度
     * @param string $maxHeight  高度
     * @param boolean $interlace 启用隔行扫描
     * @return void
     */
    function thumb($image, $type = '', $maxWidth = 200, $maxHeight = 200, $interlace = true){
		// 获取原图信息
		$info  = $this->getImageInfo($image);
		if($info != false) {
			$srcWidth  = $info['width'];
			$srcHeight = $info['height'];
			$type = empty($type) ? $info['type'] : $type;
			//把字符转成小写
			$type = strtolower($type); 
			$interlace  =  $interlace ? 1 : 0;
			//销毁变量
			unset($info);
			$scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例			
			// 缩略图尺寸
			$width  = (int)($srcWidth * $scale);  
			$height = (int)($srcHeight * $scale); 

			// 载入原图
			//imagecreatefrom系列函数用于从文件或 URL 载入一幅图像，成功返回图像资源，失败则返回一个空字符串。 
			//如果图片为 .jpg 格式使用函数 //imagecreatefromjpeg()
			$createFun = 'ImageCreateFrom'.($type=='jpg' ? 'jpeg' : $type); 
			$srcImg     = $createFun($image);

			//创建缩略图
			//imagecreatetruecolor()和imagecreate()
			if($type != 'gif' && function_exists('imagecreatetruecolor'))
				$thumbImg = imagecreatetruecolor($width, $height);
			else
				$thumbImg = imagecreate($width, $height);

			// 复制图片,imagecopyresampled按裁切大小新建的图片
			if(function_exists("ImageCopyResampled"))
				imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
			else
				imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
			if('gif' == $type || 'png'  == $type) {
				//imagealphablending($thumbImg, false);//取消默认的混色模式
				//imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息
				$background_color  =  imagecolorallocate($thumbImg, 0, 255 ,0);  //  指派一个绿色
				imagecolortransparent($thumbImg, $background_color);  //  设置为透明色，若注释掉该行则输出绿色的图
			}
			// 对jpeg图形设置隔行扫描
			if('jpg' == $type || 'jpeg' == $type)   
			imageinterlace($thumbImg, $interlace);
			//$gray=ImageColorAllocate($thumbImg,255,0,0);
			//ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);
			// 生成图片
			$imageFun = 'image'.($type == 'jpg' ? 'jpeg' : $type);

			if($type == 'png'){
				//quality参数错误了，5.1以前版本的是0-99, 然后5.1以后改为0-9了，这个参数指的是图片的压缩等级
				$quality = 4;
			}else{
				$quality = 100;
			}

			//裁剪
			$this->userDir = 'usersface/' . $this->nameid; //保存用户的（大小）头像的目录
			if(!file_exists($this->userDir)){       //判断保存目录是否存在
				mkdir($this->userDir,0777,true);    //建立保存目录
			}

			if($type == 'jpeg'){
				//为了把大小头像的jpeg扩展名换成jpg扩展名（jpeg,jpg图片都变成jpg扩展名）
				$type = 'jpg';
			}
			
			//大头像名字格式,face_1_max.jpeg    
			//$thumbname01 = 'usersface/face_' . $this->nameid . '_max.' . $type; 
			$thumbname01 = $this->userDir . '/face_' . $this->nameid . '_max.' . $type; 
			//小头像名字格式,face_1_min.jpeg     
			//$thumbname02 = 'usersface/face_' . $this->nameid . '_min.' . $type;    
			$thumbname02 = $this->userDir . '/face_' . $this->nameid . '_min.' . $type;

			//imagegif()、imagejpeg()、imagepng() 和 imagewbmp() 函数分别允许以 GIF、JPEG、PNG 和 WBMP 格式将图像输出到浏览器或文件
			$imageFun($thumbImg, $thumbname01, $quality);
			$imageFun($thumbImg, $thumbname02, $quality);

			$thumbImg01 = imagecreatetruecolor(200,200);
			imagecopyresampled($thumbImg01, $thumbImg, 0, 0, 0, 0, 200, 200, 200, 200);

			$thumbImg02 = imagecreatetruecolor(50,50);
			imagecopyresampled($thumbImg02, $thumbImg, 0, 0, 0, 0, 50, 50, 200, 200);

			$imageFun($thumbImg01, $thumbname01, $quality);
			$imageFun($thumbImg02, $thumbname02, $quality);
			//文件删除,不保裁切后的原图
			//unlink($image);
			//释放与图像关联的内存
			imagedestroy($thumbImg01);
			imagedestroy($thumbImg02);
			imagedestroy($thumbImg);
			imagedestroy($srcImg);

			//保存头像到数据库
			$this->users = $users = UsersReg::find($this->nameid);
			$this->users->avatar_file = $thumbname01; //大头像路径
			$this->users->avatar_file_min = $thumbname02; //小头像路径
			//裁切后的原图（为了加载使用）,face_1.jpeg
			//$this->users->avatar_file_def = $image;
			$this->users->save();

			return true;

		}
		return false;
	}

	/**
	 * 取得图像信息
	 * @static
	 * @access public
	 * @param string $img 图像文件名
	 * @return mixed
	 */
	function getImageInfo($img) {
		$imageInfo = getimagesize($img);
		if( $imageInfo!== false) {
			$imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));
			$imageSize = filesize($img);
			$info = array(
				"width"     =>$imageInfo[0],
				"height"    =>$imageInfo[1],
				"type"      =>$imageType,
				"size"      =>$imageSize,
				"mime"      =>$imageInfo['mime'],
			);
			return $info;
		}else {
			return false;
		}
	}   
    
}